package cn.bonoon.kernel.web.annotations.components;

import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import cn.bonoon.kernel.web.EmbedType;


/**
 * <pre>
 * 下拉选择
 * 用于定义下拉选项内容的有：
 * {@link #value()}, {@link #modelOptions()}, {@link cn.bonoon.kernel.annotations.OptionArray OptionArray}
 * 以上三种方式可以同时组合使用
 * 
 * 如果是枚举类型，建议使用{@link EnumSelector}
 * </pre>
 * @author jackson
 * 
 */
@Target(FIELD)
@Retention(RUNTIME)
public @interface AsSelector {

	/**
	 * <pre>
	 * 在下拉的列表里是否显示
	 * "--请选择--"
	 * 作为选择框的第一行
	 * 
	 * 可以修改第一行显示的内容，也可以设置为空字符串
	 * </pre>
	 * @return
	 */
	String title() default "<option value=''>--请选择--</option>";
	
	/**
	 * 手动添加选择项
	 * @return
	 */
	SelectorOption[] value() default {};

	/**
	 * <pre>
	 * 是否使用model里指定的值对象来生成select；可与{@link #value()}同时使用，
	 * 同时使用时{@link #value()}定义的将会被放在前面。
	 * 
	 * 嵌入的类型可以查看：{@link #type()}
	 * 
	 * 使用本模式替换的内容如：
	 * &lt;option&gt;选项1&lt;/option&gt;
	 * &lt;option&gt;选项2&lt;/option&gt;
	 * &lt;option&gt;选项3&lt;/option&gt;
	 * </pre>
	 * 
	 * @return
	 */
	String modelOptions() default "";
	
	/**
	 * {@link #modelOptions()}嵌入的方式
	 * @return
	 * @see EmbedType
	 */
	EmbedType type() default EmbedType.PROPERTY;
	
	/**
	 * <pre>
	 * select的选择改变的事件
	 * 
	 * 这里写的是js源码，可以直接使用的属性包括：
	 * 1.当前选中的value值 	newValue
	 * 2.旧的value值		oldValue
	 * 3.当前的ID			id
	 * </pre>
	 * @return
	 */
	String onChange() default "";
	
	/**
	 * 生成的&lt;select&gt;是否允许多选
	 * @return
	 */
	boolean multiple() default false;
	
	/**
	 * 是否使用comboBox的模式
	 * @return
	 */
	boolean comboBox() default false;
}
